#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

// 文件系统调用的使用

int main()
{
    umask(0);
    int fd = open("./bite", O_CREAT | O_RDWR | O_TRUNC, 0664);
    if(fd == -1)
    {
        perror("open failed!");
        return -1;
    }
    const char* content = "i like linux!";
    size_t content_size = strlen(content);
    int ret = write(fd, content, content_size);

    if(ret != content_size)
    {
        perror("write failed!");
        close(fd);
        return -1;
    }
    
    lseek(fd, 0, SEEK_SET);

    char read_content[1024];
    ssize_t read_ret = read(fd, read_content, sizeof(read_content) - 1);
    if(read_ret > 0)
    {
        read_content[read_ret] = '\0';
        write(STDOUT_FILENO, read_content, read_ret);
    }
    else if(read_ret < 0)
        perror("read failed");
    close(fd);
    return 0;
}







// C语言文件库函数的使用

// int main()
// {
//     FILE* fp = fopen("./bite", "w+");
//     if(fp == NULL)
//     {
//         perror("fopen failed!");
//         return -1;
//     }
//     const char* content = "linux so easy!";
//     
//     size_t content_length = strlen(content);
//     size_t ret = fwrite(content, 1, content_length, fp);
//     if(ret != content_length) 
//     {
//         perror("write failed!");
//         fclose(fp);
//         return -1;
//     }
//     
//     // 将文件指针移回文件开头
//     fseek(fp, 0, SEEK_SET);
// 
//     char read_content[1024];
//     ret = fread(read_content, 1, sizeof(read_content) - 1, fp);
//     if(ret > 0)
//     {
//         read_content[ret] = '\0';
//         printf("%s\n", read_content);
//     }
//     fclose(fp);
//     return 0;
// }
